﻿using System;

namespace DatabaseManager.Core.Models
{
    /// <summary>
    /// 表示数据库表中一个字段的元数据信息。
    /// </summary>
    public class ColumnInfo
    {
        /// <summary>
        /// 字段名称。
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 所属表名。
        /// </summary>
        public string TableName { get; set; }

        /// <summary>
        /// 所属架构名（如 dbo、public 等），默认值视数据库而定。
        /// </summary>
        public string SchemaName { get; set; }

        /// <summary>
        /// 所属数据库名，用于跨库搜索或元数据聚合时区分来源。
        /// </summary>
        public string DatabaseName { get; set; }

        /// <summary>
        /// 字段的数据类型（如 int, varchar(50), datetime 等）。
        /// </summary>
        public string DataType { get; set; }

        /// <summary>
        /// 是否允许 NULL 值。
        /// </summary>
        public bool IsNullable { get; set; }

        /// <summary>
        /// 默认值表达式（如 (0), (getdate()) 等）。
        /// </summary>
        public string DefaultValue { get; set; }

        /// <summary>
        /// 字段注释或描述信息（如果存在）。
        /// </summary>
        public string Comment { get; set; }

        /// <summary>
        /// 是否是主键字段。
        /// </summary>
        public bool IsPrimaryKey { get; set; }

        /// <summary>
        /// 是否是外键字段。
        /// </summary>
        public bool IsForeignKey { get; set; }

        /// <summary>
        /// 返回字段的完整路径表示：[DatabaseName].[SchemaName].[TableName].[Name]
        /// </summary>
        public string FullName
        {
            get
            {
                return $"{DatabaseName}.{SchemaName}.{TableName}.{Name}";
            }
        }

        /// <summary>
        /// 返回字段的简要路径表示：[TableName].[Name]
        /// </summary>
        public string ShortName
        {
            get
            {
                return $"{TableName}.{Name}";
            }
        }
    }
}